"""文件自动分类整理工具

根据文件扩展名自动将文件分类整理到不同文件夹中。

用法:
    python organization.py

功能:
    - 自动创建分类文件夹
    - 按文件类型分类移动文件
    - 复制子文件夹到统一目录

分类规则:
    img: jpeg, png, jpg, gif, wbp
    doc: docx, doc, xls, xlsx, csv, md, pdf, json, apkg
    安装包: exe, zip, msi, jar
    文件夹: 存放所有子文件夹

示例:
    > cd your_messy_directory
    > python organization.py
    已将 test.jpg 移动到 img 文件夹。
    已将 doc.pdf 移动到 doc 文件夹。
    已将子文件夹 project 复制到 文件夹 目录下。

注意:
    - 在要整理的目录下运行
    - 文件移动操作不可撤销
    - 子文件夹会被复制而不是移动
    - 目标文件夹会自动创建
"""

import os
import shutil

# 直接在代码里定义配置信息，相当于原本 config.txt 的内容
config = {
    "img": ["jpeg", "png","jpg","gif","wbp"],
    "doc": ["docx","doc","xls","xlsx","csv","md", "pdf","json","apkg"],
    "安装包": ["exe","zip","msi","jar"]
}


def organize_files(source_dir):
    """
    根据配置文件将文件整理到不同的文件夹中
    """
    # 获取配置文件中指定的所有目标文件夹名
    target_folders = list(config.keys())
    target_folders.append('文件夹')  # 包含用于存放子文件夹的目标文件夹

    # 处理文件
    for file in os.listdir(source_dir):
        file_path = os.path.join(source_dir, file)
        if os.path.isfile(file_path):
            file_ext = os.path.splitext(file)[1][1:].lower()
            for folder, extensions in config.items():
                if file_ext in extensions:
                    target_folder = os.path.join(source_dir, folder)
                    if not os.path.exists(target_folder):
                        os.makedirs(target_folder)
                    target_file_path = os.path.join(target_folder, file)
                    try:
                        shutil.move(file_path, target_file_path)
                        print(f"已将 {file} 移动到 {folder} 文件夹。")
                    except Exception as e:
                        print(f"移动 {file} 时出错: {e}")

    # 处理子文件夹
    target_subfolder_dir = os.path.join(source_dir, '文件夹')
    if not os.path.exists(target_subfolder_dir):
        os.makedirs(target_subfolder_dir)
    for item in os.listdir(source_dir):
        item_path = os.path.join(source_dir, item)
        if os.path.isdir(item_path) and item not in target_folders:
            target_item_path = os.path.join(target_subfolder_dir, item)
            try:
                shutil.copytree(item_path, target_item_path)
                print(f"已将子文件夹 {item} 复制到 文件夹 目录下。")
            except Exception as e:
                print(f"复制子文件夹 {item} 时出错: {e}")


if __name__ == "__main__":
    # 要整理的文件所在的目录
    source_dir = '.'
    # 整理文件
    organize_files(source_dir)